const express = require('express')
const router = express.Router()
const { addUser, hasUserName, updateUser, getUserById } = require('../services/UserService')
const { common } = require('../utils/userTypes')
const { commonUserPermission } = require('../utils/permissions')
// 登录
router.post('/login', async (req, res) => {
  const { userName, loginPwd, userType } = req.body
  const user = await hasUserName(userName, true)
  if (!user) {
    res.status(404).json({ msg: '用户不存在', code: 0 })
  } else if (user.userType !== userType) {
    res.status(401).json({ msg: '用户类型不匹配', code: 0 })
  } else if (user.loginPwd !== loginPwd) {
    res.status(400).json({ msg: '用户名或密码错误', code: 0 })
  } else {
    updateUser(user.id, { loginStatus: true }) // 更新记录里的登录状态,用以远程控制登录状态
    req.session.isLoggedIn = true //设置session中登录状态
    req.session.userId = user.id //设置session中用户id
    res.status(200).json({
      msg: '登录成功',
      code: 1,
    })
  }
})
// 注册
router.post('/register', async (req, res) => {
  const { userName, loginPwd } = req.body
  // 避免重复添加, 根据userName查询数据库
  const hasOrNot = await hasUserName(userName)
  if (hasOrNot) res.status(401).json({ msg: '用户名已存在', code: 0 })
  else {
    const user = await addUser({
      userName,
      loginPwd,
      userType: common,
      permission: commonUserPermission,
    })
    res.status(200).json({ msg: '注册成功', code: 1, userId: user.id })
  }
})
// 修改密码
router.put('/forgetPwd', async (req, res) => {
  // 前面的查找用户逻辑与登录几乎一致
  const { userName, loginPwd } = req.body
  const user = await hasUserName(userName, true)
  if (!user) {
    res.status(404).json({ msg: '用户不存在', code: 0 })
  } else if (user.userType !== common) {
    res.status(401).json({ msg: '暂无权限修改密码', code: 0 })
  } else if (user.loginPwd === loginPwd) {
    res.status(400).json({ msg: '新密码不能与旧密码相同', code: 0 })
  } else {
    updateUser(user.id, { loginPwd, loginStatus: false }) // 更新记录里的密码,并将登录状态设置为false
    res.status(200).json({ msg: '密码修改成功', code: 1 })
  }
})
// 登出
router.get('/logout', (req, res) => {
  if (!req.session.isLoggedIn) return res.status(401).json({ msg: '用户未登录', code: 0 })
  updateUser(req.session.userId, { loginStatus: false }) // 更新记录里的登录状态,用以远程控制登录状态
  req.session = null // 清除session
  res.status(200).json({ msg: '登出成功', code: 1 })
})

// 注销

// 获取当前登录用户信息用于登录状态判断,权限判断等
router.get('/profile', async (req, res) => {
  if (!req.session.isLoggedIn) return res.status(401).json({ msg: '用户未登录', code: 0 })
  const user = await getUserById(req.session.userId)
  if (!user) return res.status(404).json({ msg: '用户已注销', code: 0 })
  if (user.loginStatus === false) return res.status(401).json({ msg: '用户已被远程下线', code: 0 }) //远程控制登录状态
  res
    .status(200)
    .json({ msg: '存在已登录用户', userName: user.userName, permission: user.permission, code: 1 })
})

module.exports = router
